package com.aiassistant.model;

import java.util.HashMap;
import java.util.Map;

/**
 * AI模型管理器
 */
public class ModelManager {
    private static ModelManager instance;
    private Map<String, AIModelInterface> models = new HashMap<>();
    private String currentModel = "deepseek";
    
    /**
     * 私有构造函数
     */
    private ModelManager() {
        // 初始化默认模型
        Settings settings = Settings.getInstance();
        initializeDefaultModels(settings);
    }
    
    /**
     * 获取单例实例
     */
    public static synchronized ModelManager getInstance() {
        if (instance == null) {
            instance = new ModelManager();
        }
        return instance;
    }
    
    /**
     * 初始化默认模型
     */
    private void initializeDefaultModels(Settings settings) {
        // 添加DeepSeek模型
        DeepSeekModel deepSeekModel = new DeepSeekModel(
            settings.getApiKey(), 
            settings.getApiUrl()
        );
        registerModel("deepseek", deepSeekModel);
    }
    
    /**
     * 注册模型
     */
    public void registerModel(String id, AIModelInterface model) {
        models.put(id, model);
    }
    
    /**
     * 获取当前模型
     */
    public AIModelInterface getCurrentModel() {
        AIModelInterface model = models.get(currentModel);
        if (model == null) {
            // 如果当前模型不可用，返回第一个可用模型
            for (AIModelInterface m : models.values()) {
                if (m.isAvailable()) {
                    return m;
                }
            }
            // 如果没有可用模型，返回一个错误模型
            return createErrorModel();
        }
        return model;
    }
    
    /**
     * 获取指定ID的模型
     */
    public AIModelInterface getModel(String modelId) {
        return models.getOrDefault(modelId, createErrorModel());
    }
    
    /**
     * 设置当前模型
     */
    public boolean setCurrentModel(String modelId) {
        if (models.containsKey(modelId)) {
            currentModel = modelId;
            return true;
        }
        return false;
    }
    
    /**
     * 获取所有注册的模型
     */
    public Map<String, AIModelInterface> getAllModels() {
        return models;
    }
    
    /**
     * 创建一个错误模型（当没有可用模型时使用）
     */
    private AIModelInterface createErrorModel() {
        return new AIModelInterface() {
            @Override
            public java.util.concurrent.CompletableFuture<String> getResponse(String prompt) {
                return java.util.concurrent.CompletableFuture.completedFuture(
                    "错误: 没有可用的AI模型。请在设置中配置API密钥。"
                );
            }
            
            @Override
            public java.util.concurrent.CompletableFuture<String> analyzeImage(java.io.File imageFile) {
                return java.util.concurrent.CompletableFuture.completedFuture(
                    "错误: 没有可用的AI模型。请在设置中配置API密钥。"
                );
            }
            
            @Override
            public boolean isAvailable() {
                return false;
            }
            
            @Override
            public String getName() {
                return "错误模型";
            }
        };
    }
} 